﻿using System.Web;
using System.IO.Compression;
using System.Web.Mvc;

namespace Monitor.Models.FilterAttribute
{
    /// <summary>
    /// атрибут на сжатие данных средствами .net
    /// </summary>
    public class EnableCompressionAttribute : ActionFilterAttribute
    {
        const CompressionMode compress = CompressionMode.Compress;
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpRequestBase request = filterContext.HttpContext.Request;    //запрос
            HttpResponseBase response = filterContext.HttpContext.Response; //ответ
            string acceptEncoding = request.Headers["Accept-Encoding"];//получаем объект Accept-Encoding
            if (acceptEncoding == null)//если объект пустой
                return;
            else if (acceptEncoding.ToLower().Contains("gzip"))             //содержит строчку сжатие gzip
            {
                response.Filter = new GZipStream(response.Filter, compress);//включаем сжатие
                response.AppendHeader("Content-Encoding", "gzip");          //добавляем в ответ что будем сжимать
            }
            else if (acceptEncoding.ToLower().Contains("deflate"))          //аналогично gzip
            {
                response.Filter = new DeflateStream(response.Filter, compress);
                response.AppendHeader("Content-Encoding", "deflate");
            }
        }
    }
}